package com.yuyue.demo1;

import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;

public class ConnectDemo {

    public static void main(String[] args) {
        ConnectDemo connectDemo = new ConnectDemo();
        // CuratorFramework client = connectDemo.connectByFactory();
        CuratorFramework client = connectDemo.connectByBuild();

        connectDemo.close(client);
    }

    /**
     * 工厂模式创建连接
     */
    public CuratorFramework connectByFactory() {
        // 重试策略，参数：间隔时间（毫秒），重试次数
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);

        /*
         * 工厂模式获取连接对象
         *
         * @param connectString       连接字符串"ip:port,ip:port"
         * @param sessionTimeoutMs    会话超时时间（毫秒）
         * @param connectionTimeoutMs 连接超时时间（毫秒）
         * @param retryPolicy         重试策略
         */
        CuratorFramework client = CuratorFrameworkFactory.newClient("192.168.77.132:2181",
                60 * 1000, 60 * 1000, retryPolicy);

        //指定命名空间
        client.usingNamespace("yuyue");

        // 启动客户端
        client.start();
        System.out.println("连接成功");

        return client;
    }

    /**
     * 链式编程创建连接
     */
    public CuratorFramework connectByBuild() {
        // 重试策略，参数：间隔时间（毫秒），重试次数
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);

        // 创建连接对象
        CuratorFramework client = CuratorFrameworkFactory.builder()
                .connectString("192.168.77.132:2181") //连接字符串"ip:port,ip:port"
                .sessionTimeoutMs(60*1000)   //会话超时时间
                .connectionTimeoutMs(60*1000) //连接超时时间
                .retryPolicy(retryPolicy) //重试策略
                .namespace("yuyue") //命名空间
                .build();

        // 启动客户端
        client.start();
        System.out.println("连接成功");

        return client;
    }

    /**
     * 关闭连接
     * @param client zk连接对象
     */
    public void close(CuratorFramework client) {
        if (client == null){
            return;
        }

        client.close();
        System.out.println("连接关闭");
    }
}
